package com.deuwise.common.utils;

/**
 * Copyright
 *密码状态类，记录用户在平台密码强度所有的状态。
 * @author chenwenchao
 * @date 2019/3/19
 * Description:
 */
public class BitStatesUtils {
    /**
     * 是否使用密码检测
     */
    public final static Long USE_PASSWORD_CHECK = 1L << 0;

    /**
     * 是否包含数字
     */
    public final static Long INCLUDE_NUM = 1L << 1;
    /**
     * 密码是否包含小写字母
     */
    public final static Long INCLUDE_LOWERCASE = 1L << 2;
    /**
     * 密码是否包含大写字母
     */
    public final static Long INCLUDE_UPPERCASE = 1L << 3;
    /**
     * 密码是否包含特殊字符
     */
    public final static Long INCLUDE_SPECIAL = 1L << 4;

    /**
     * 是否密码过期
     */
    public final static Long OVER_DUE = 1L << 5;


    /**
     * @param states
     *            所有状态值
     * @param value
     *            需要判断状态值
     * @return 是否存在
     */
    public static boolean hasState(long states, long value) {
        return (states & value) != 0;
    }

    /**
     * @param states
     *            已有状态值
     * @param value
     *            需要添加状态值
     * @return 新的状态值
     */
    public static long addState(long states, long value) {
        if (hasState(states, value)) {
            return states;
        }
        return (states | value);
    }

    /**
     * @param states
     *            已有状态值
     * @param value
     *            需要删除状态值
     * @return 新的状态值
     */
    public static long removeState(long states, long value) {
        if (!hasState(states, value)) {
            return states;
        }
        return states ^ value;
    }

}
